bios {
	comments {
		800f = "KOEI VM BIOS";
		801b = "select bank = 00";
		801f = "clear screen";
		802d = "set stack base address";
		8031 = "set up self-modifying-code move function\n$54 == mvn";
		8035 = "$60 == rts";
		803b = "clear overlay heap table";
		8052 = "load root overlay";
		805f = "index[0].addr";
		8065 = "index[0].size";
		806b = "index[0].unk";
		806f = "destination = 7e/2000";
		8080 = "initialize";
		8099 = "call into root overlay (7e/2000)";
		
		836f = "send apu data";
		8394 = "...";
		83b7 = "load palette data";

		857b = "set up dma registers (copy 8 bytes)";
		857e = "	$0b20 = source data";
		8581 = "	$0038 = destination address";
		8589 = "dma transfer code = $004c";
		858b = "dma_enable = $004c";

		99ef = "couldn't find matching overlay in main index\nreturn -1";
 
		9b82 = "size (bytes)";
		9b8a = "source offset";
		9b8c = "size (bytes)";
		9b9c = "size (bytes)";
		9bb2 = "destination offset";
		9bb7 = "destination offset";
		
		9bcc = "destination offset";
		9bce = "source offset";
		9bd0 = "size (bytes)";
	}

	labels {
		8052 = _lload_root_ovl;
		8388 = _lnmi_only_apu_23;
		8394 = _lnmi_no_apu;
		83e3 = _lnmi_no_palette;
		93db = _lso10_wait;
		93eb = _lso11_wait;
		99ef = _lerror_cant_find_overlay;
	}	

	func {
		006c = smc_mvn;

		8000 = jmp_vm_op;
		8003 = jmp_pre_sysop;
		8006 = jmp_vm_op_long1;
		8009 = jmp_vm_op_long2;
		800c = jmp_sysop;

		800f = so00_reset;
		80a0 = init_hw_registers;
		8190 = init_mem;
		82a7 = init_vram;
		82d7 = init_CGRAM;
		8308 = init_mem_900_b00;
		832d = init_audio;
		833e = init_sdisc;
		
		8355 = nmi_handler;
		8424 = write_OAM;
		844b = load_palette;
		847c = v_write_1;
		8506 = transfer_dma;
		85a9 = v_write_2;
		862a = v_write_3;
		8652 = v_write_4;
		869e = v_write_5;
		8707 = v_write_6;
		87a4 = v_write_7;
		881d = nmi_sub0;
		8864 = nmi_sub1;
		88bf = v_write_8;

		8977 = 8977;

		89db = v_write_9;
		8a5a = nmi_sub2;
		8a92 = configure_BG0;
		8b3b = transfer_DMA75;
		8baf = vram_write;
		8bcd = nmi_cfg_m7;

		8c08 = set_screen_register;
		8c13 = multiply;
		8c20 = divide;
		8c3d = read_joypad;
		8c54 = DMA0_OAM;
		8c82 = load_palette;
		8cba = VRAM_write_6;

		8d13 = sysop;
		8d3a = sysop_long;
		8d61 = set_ptr1_7e55xx;
		
		8d70 = so01_configure_bg_1;
		8e29 = so02_configure_bg_2;
		8f7e = so02_sub;
		8fbf = so03_load_palette;
		8ff7 = so04_vw04;
		904b = configure_vw1;
		90ac = execute_vw;
		9087 = so05_vw02;
		90de = so06_vw01;
		9109 = so07_vw80;
		9125 = so08_w128;
		9144 = ptr1_8000_inc_db;
		915c = so09_multiply;
		925a = wordfill1;
		92ae = so0a_fill1;
		92d2 = configure_vw2;
		92f4 = so0b_load_tiles;
		9330 = so0c_vw681;
		936c = so0d_load_tiles_b;
		9397 = so0e_vw681b;
		93c2 = so0f_get_v25;
		93ce = so10;
		93e7 = so11;
		9403 = so13_pal_flag_01;
		9411 = so14_set_bgobj;
		9424 = so16_set_v3cl;
		942c = so22_set_screen_1;
		9449 = so23_set_screen_2;
		946d = so44;
		9475 = timeup_interrupt;
		9495 = so45;
		94e2 = so46;
		9522 = so47_set_bg_mode_1;
		952d = so4a_decompress;

		96bc = decompress_1;
		97b2 = decompress_2;

		9965 = so17_memcpy_1;
		997f = so18_allocate_ovl;
		99f5 = so19_set_x1x2z5;

		9a0f = so1a_set_2;
		9a76 = so1b_ovl_memcpy_1;
		9a8e = so1c_ovl_memcpy_2;
		9aa5 = so1d_ovl_load_pal;
		9abc = so1e_ovl_vw01b;
		9acb = so1f_ovl_so09_mul;
		9ade = so20_ovl_so0b;
		9aef = so21_ovl_so0d;

		9afe = ovl_1e00_1;
		9b3d = get_free_1e00_slot;
		9b5f = find_1e00_entry;
		9b80 = memcpy;
		9bbc = memcpy_block;

		9bdb = so15_get_scanline_pos;
		9bf7 = so24_memset;

		9c11 = so25_set_v1C;
		9c1b = so26;
		9cf9 = so27_zero_cc3_winregs;

		9d14 = so28;
		9d65 = so2a_dma2a;
		9ddc = so2b_dma2b;

		9ead = so29_reset_background;

		9f02 = so2e_set_mode7_xy;
		9f19 = so2f;
		9f3a = so2c_ovl9;
		9f49 = so2d;
		9f58 = so30_configure_coloradd;
		9f6a = so49;
		9fa5 = bios_9fa5;
		9fac = bios_9fac;
		
		9fd0 = vm_op;

		abed = abed;
		ac1c = ac1c;
		ac34 = ac34;
		ac66 = ac66;

		ac76 = so31;
		acbb = so32;

		ad3b = ad3b;
		ad60 = ad60;
		ad85 = ad85;
		ada3 = ada3;
		adc1 = adc1;
		add0 = add0;
		addf = addf;
		adf4 = adf4;
		ae09 = ae09;
		ae24 = ae24;
		ae66 = ae66;
		b032 = b032;
		b097 = b097;
		b0aa = b0aa;
		b0cf = b0cf;
		b0f1 = b0f1;
		b1e0 = b1e0;

		b112 = so33;
		b123 = so34;
		b1ff = so35;
		b20a = so12;

		b26e = b26e;

		b363 = so36;
		b36e = so37;

		b3b7 = b3b7;
		b419 = b419;
		b465 = b465;

		b48f = so38;
		b4a5 = so39;
		b525 = so3a;
		b545 = so3b;
		b572 = so42;
		b596 = so48;
		b5a5 = so43;
		
		b646 = b646;

		b65e = audio_1;
		b71f = so3c_audio1;
		b731 = so3d_audio2;
		b740 = so3e_audio3_read;
		b74d = so3f_audio4;
		b765 = so40_audio5;
		b770 = so41_audio6;
	}
	
	data {
		0030 = w0;
		0031 = w0l;
		0032 = w1;
		0033 = w1l;
		0034 = w2;
		0035 = w2l;
		0036 = w3;
		0037 = w3l;
		0038 = w4;
		0039 = w4l;
		003a = w5;
		003b = w5l;
		003c = w6;
		003d = ptr1;
		003e = ptr1_hi;
		003f = ptr1_db;
		
		0040 = x1;
		0042 = x2;
		0044 = x3;
		0046 = x4;
		0048 = x5;
		004a = x6;
		004c = x7;
		004d = x7l;
		004e = x8;
		
		0050 = y1;
		0052 = y2;
		0054 = so_arg1;
		0056 = so_arg2;
		0058 = so_arg3;
		005a = so_arg4;
		005c = so_arg5;
		005e = so_arg6;

		0060 = z1;
		0062 = z2;
		0064 = z3;
		0066 = z4;
		0068 = so_return_code;
		006a = z6;

		006c = smc.mvn;
		006d = smc.mvn.src;
		006e = smc.mvn.dest;
		
		0094 = w8;
		0097 = w9;
		0098 = w10;
		0099 = w11;
		009b = w12;
		009d = w13;
		009f = w14;
		00a1 = w15;
		00a3 = w16;
		00a5 = w17;
		00a6 = w18;
		00a8 = w19;
		00aa = w20;
		00ac = w21;
		00ae = w22;
		00b0 = w23;
		00b2 = w24;
		00b4 = w25;
		00b6 = w26;
		00b8 = w27;
		00ba = w28;
		00bb = w29;
		00be = w30;
		00bf = w31;
		00c0 = w32;
		00cc = w33;
		00ce = w34;

		00d0 = w35;

		0900 = so39_0;
		0901 = so3a_1;
		0902 = q1;
		0903 = q1l;

		0b00 = b00;
		0b02 = b01;
		0b04 = b02;
		0b06 = b03;
		0b08 = b04;
		0b0a = b05;
		0b0c = b06;
		0b0e = b07;

		0b10 = b08;
		0b12 = b09;
		0b14 = b0A;
		0b16 = b0B;
		0b18 = b0C;
		0b1a = b0D;
		0b1c = b0E;
		0b1e = b0F;

		0b20 = b10;
		0b21 = so02.var1;
		0b22 = b11;
		0b23 = so02.var2;
		0b24 = b12;
		0b25 = so02.var3;
		0b26 = b13;
		0b27 = so44_var1;
		0b28 = b14;
		0b29 = so01_var4;
		0b2a = b15;
		0b2b = so01_var2;
		0b2c = b16;
		0b2d = so01_var3;
		0b2e = b17;
		0b2f = so01_var5;
		
		0b30 = b18;
		0b31 = so01_var6;
		0b32 = b19;
		0b33 = so01_var7;
		0b34 = b1A;
		0b35 = so01_var9;
		0b36 = b1B;
		0b37 = so01_var8;
		0b38 = screen_register_value;
		0b39 = so01_var1;
		0b3a = b1D;
		0b3c = b1E;
		0b3d = nmi_cfg_m7.a;
		0b3e = b1F;
		0b3f = nmi_cfg_m7.b;

		0b40 = b20;
		0b41 = nmi_cfg_m7.c;
		0b42 = b21;
		0b43 = nmi_cfg_m7.d;
		0b44 = so03.var4;
		0b45 = so03.var1;
		0b46 = so03.var2;
		0b47 = so03.var3;
		0b48 = so03.var5;
		0b4a = b25;
		0b4b = so0f_ptr1;
		0b4c = b26;
		0b4d = b26l;
		0b4e = b27;
		0b4f = so10_var1;

		0b50 = vw_pal_flag;
		0b51 = vw6_flag1;
		0b52 = divide_quotient;
		0b54 = divide_remainder;
		0b56 = b2B;
		0b58 = b2C;
		0b59 = so09.var1;
		0b5a = b2D;
		0b5b = so09.var2;
		0b5c = nmi_sub0.flag1;
		0b5d = nmi_sub0.flag2;
		0b5e = nmi_sub0.index;

		0b60 = nmi_sub0.value;
		0b61 = b30l;
		0b62 = b31;
		0b63 = b31l;
		0b64 = b32;
		0b65 = b32l;
		0b66 = nmi_sub0.count;
		0b67 = vw2.var1;
		0b68 = b34;
		0b69 = vw2.var2;
		0b6a = b35;
		0b6b = vw2.var3;
		0b6c = b36;
		0b6e = vw_type;
		0b6f = vw_size_lo;

		0b70 = b38;
		0b71 = vw_blocks;
		0b72 = b39;
		0b73 = vw_addr2;
		0b74 = b3A;
		0b75 = vw_dst_addr0;
		0b76 = vw_dst_addr1;
		0b77 = vw_src_addr0;
		0b78 = vw_src_addr1;
		0b79 = b3Cl;
		0b7a = b3D;
		0b7b = so11_var1;
		0b7c = so11_var2;
		0b7d = b3El;
		0b7e = so11_var3;
		0b7f = b3Fl;

		0b80 = so11_count;
		0b81 = b40l;
		0b82 = b41;
		0b83 = b41l;
		0b84 = b42;
		0b85 = b42l;
		0b86 = b43;
		0b87 = b43l;
		0b88 = b44;
		0b89 = b44l;
		0b8a = b45;
		0b8b = b45l;
		0b8c = b46;
		0b8d = b46l;
		0b8e = b47;

		0b90 = b48;
		0b91 = b48l;
		0b92 = b49;
		0b94 = b4A;
		0b96 = b4B;
		0b98 = b4C;
		0b9a = b4D;
		0b9c = b4E;
		0b9e = b4F;

		0ba0 = b50;
		0ba2 = b51;
		0ba4 = b52;
		0ba6 = b53;
		0ba8 = b54;
		0ba9 = b54l;
		0baa = b55;
		0bab = b55l;
		0bac = b56;
		0bad = b56l;
		0bae = b57;
		0baf = b57l;
		0bb0 = b58;
		0bb1 = b58l;
		0bb2 = b59;
		0bb3 = b59l;
		0bb4 = b5A;
		0bb5 = b5A_addr;
		0bb6 = b5B;
		0bb8 = b5C;
		0bba = b5D;
		0bbc = b5E;
		0bbd = b5E_addr;
		0bbe = b5F;

		0bc0 = b60;
		0bc2 = b61;
		0bc4 = b62;
		0bc5 = b62l;
		0bc6 = b63;
		0bc7 = b63l;
		0bc8 = b64;
		0bca = b65;
		0bcc = b66;
		0bce = b67;
		0bcf = b67l;
		0bd0 = b68;
		0bd2 = b69;
		0bd4 = b6A;
		0bd6 = b6B;
		0bd8 = b6C;
		0bda = b6D;
		0bdc = b6E;
		0bde = b6F;

		0be0 = b70;
		0be2 = b71;
		0be4 = b72;
		0be6 = b73;
		0be8 = b74;
		0bea = b75;
		0bec = b76;
		0bee = b77;
		0bf0 = b78;
		0bf2 = b79;
		0bf4 = b7A;
		0bf6 = b7B;
		0bf8 = b7C;
		0bfa = b7D;
		0bfc = b7E;
		0bfe = b7F;

		0c8e = Cn8E;
		0cae = CnAE;
		0cb0 = CnB0;
		0cb2 = CnB2;
		0cb4 = CnB4;
		0cb6 = CnB6;

		0cb7 = so3b_7;
		0cb8 = so3b_8;
		0cba = so3b_a;
		0cbc = so3b_c;
		0cbd = so3b_d;
		0cbe = so3b_e;
		0cbf = so3b_f;

		0cc0 = c00;
		0cc1 = c00l;
		0cc2 = c01;
		0cc3 = d75.7_flag2;
		0cc4 = d75.7_flag1;
		0cc6 = d75.7_w.mask12;
		0cc7 = d75.7_w.mask34;
		0cc8 = d75.7_w.obj_color;
		0cc9 = d75.7_addr_lo;
		0ccb = c05l;
		0ccd = c06l;
		0ccf = c07l;
		0cd0 = c08;
		0cd1 = c08l;
		0cd2 = c09;
		0cd4 = c0A;
		0cd5 = td75.5_flag;
		0cd6 = td75.5_type;
		0cd7 = td75.5_dest;
		0cd8 = td75.5_addr_lo;
		0cda = td75.5_bank_indirect;
		0cdb = vram_write.flag;
		0cdd = vram_write.addr;
		0cdf = vram_write.data;

		0ce0 = c10;
		0ce1 = vram_write.words;
		0ce2 = c11;
		0ce3 = c11l;
		0ce4 = gfx_mode;
		0ce5 = c12;
		0ce6 = c13;
		0ce7 = nmi_cfg_m7.flag;
		0ce8 = apu_send01_flag;
		0ce9 = apu0;
		0cea = apu1;
		0ceb = apu2;
		0cec = apu3;
		0ced = apu_nodata_flag;
		0cee = c17;
		0cf0 = c18;
		0cf1 = c18l;
		0cf2 = c19;
		0cf3 = c19l;
		0cf4 = c1A;
		0cf6 = c1B;
		0cf8 = c1C;
		0cfa = c1D;
		0cfb = c1Dl;
		0cfc = c1E;
		0cfd = c1El;
		0cfe = c1F;
		0cff = c1Fl;
		
		0d00 = d0;
		0d02 = d1;
		0d04 = d2;
		0d06 = d3;
		0d08 = d4;

		1e00 = overlay_heap_table;

		809c = long_root_addr;
		9545 = dc_mask_table;
		955f = dc_mask_table[13];
		9567 = dc_tbl_a;
		959f = db_tbl_b;
		95de = db_tbl_c;
		95e6 = dc_tbl_d;
		96a6 = db_tbl_e;
		9825 = dc_ftbl_1;
		986d = dc_ftbl_2;
		98b9 = sysop_tbl;
		
		994f = unk1;
		9957 = unk1+8;
		9958 = unk1+9;
		995b = unk1b;
		9961 = unk1c;
		
		a66a = vmop_tbl;
		a882 = vmop_long_tbl;

		b79e = map.unk1[98];
		b800 = map.run_ff_1[256];
		b900 = map.unk2[256];
		ba00 = map.run_ff_2[256];
		bb00 = map.unk3[256];
		bc00 = map.run_ff_3[180];
		bcb4 = map.unk4;
		bcb5 = map.run_ff_4[75];
		bd00 = map.unk5[256];
		be00 = map.run_ff_5[256];
		bf00 = map.unk6[3088];
		cb10 = map.run_00_1[69];
		cb55 = map.unk7;
		cb56 = map.run_00_2[170];
		cc00 = map.unk8[803];
		cf23 = map.run_00_3[222];
		d001 = map.unk9[2815];
		db00 = map.run_00_4[256];
		dc00 = map.unk10[768];
		df00 = map.run_00_5[211];
		dfd3 = map.unk11[557];
		e200 = map.run_ff_6[241];
		e2f1 = map.unk12[271];
		e400 = map.run_ff_7[144];
		e490 = map.unk13;
		e491 = map.run_ff_8[111];
		e500 = map.unk14[256];
		e600 = map.run_ff_9[256];
		e700 = map.unk15[256];
		e800 = map.run_ff_10[256];
		e900 = map.unk16[256];
		ea00 = map.run_ff_11[211];
		ead3 = map.unk17[353];
		ec34 = map.run_ff_12[204];
		ed00 = map.unk18[256];
		ee00 = map.run_ff_13[226];
		eee2 = map.unk19[335];
		f031 = map.run_ff_14[100];
		f095 = map.unk20[363];
		f200 = map.run_ff_15[256];
		f300 = map.unk21[768];
		f600 = map.run_ff_16[219];
		f6db = map.unk22[293];

		f800 = overlay_index;
		fd00 = unk3;
		fe00 = unk4;
		ff00 = unk5;
		ffb0 = reg;
		ffc0 = spec;
	}
}
